package model;

import java.util.*;
import java.util.List;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.lang.*;

import vue.FenetrePrincipale;
import vue.Grille;
import vue.ObserveurPlateau;
import vue.West;

/**
 * Une case est definie a partir des coordonnees (x et y); donc case = contenu i�i
 * Class Case
 * 
 */
public class Case {

	//
	// Fields
	//

	
	private boolean selectionner, cible;
	private Personnage perso;
	private final int x,y;
	private String chemainFichierImage;
	private model.DecorateurPersonnage bonusMalus;
	private Plateau plateau;
	//protected final FenetrePrincipale E;
	
	public Personnage getPerso() {
		return perso;
	}
	
	public String getImagePerso() {
		if (getPerso()!=null)
			return getPerso().getChemainFichierImage();
		else
			return "";
	}

	public void setPerso(Personnage perso_) {
		this.perso = perso_;
	}

	public int getX() {
		return x;
	}

	public int getY() {
		return y;
	}

	//
	// Constructors
	//
	public Case (int x, int y, Plateau plateau){
		this(x, y , plateau, null);
		chemainFichierImage="img/herbe.jpg";
	}
	public Case(int x, int y, Plateau plateau, Personnage P){
		setSelectionner(false);
		this.plateau=plateau;
		this.x=x;
		this.y=y;
		this.perso=P;
	}

	//
	// Methods
	//

	//
	// Accessor methods
	//

	/**
	 * Set the value of chemainFichierImage
	 * 
	 * @param newVar
	 *            the new value of chemainFichierImage
	 */
	public void setChemainFichierImage(String newVar) {
		chemainFichierImage = newVar;
	}

	/**
	 * Get the value of chemainFichierImage
	 * 
	 * @return the value of chemainFichierImage
	 */
	public String getChemainFichierImage() {
		return chemainFichierImage;
	}

	/**
	 * Set the value of bonusMalus
	 * 
	 * @param newVar
	 *            the new value of bonusMalus
	 */
	private void setBonusMalus(model.DecorateurPersonnage newVar) {
		bonusMalus = newVar;
	}

	/**
	 * Get the value of bonusMalus
	 * 
	 * @return the value of bonusMalus
	 */
	private model.DecorateurPersonnage getBonusMalus() {
		return bonusMalus;
	}

	public boolean isSelectionner() {
		return selectionner;
	}

	protected void setSelectionner(boolean selectionner) {
		this.selectionner = selectionner;
	}

	public boolean isCible() {
		return cible;
	}

	public void setCible(boolean cible) {
		this.cible = cible;
	}
	
	public Case getCaseDistante (int deltaX, int deltaY) {
		if (x+deltaX>=0 && x+deltaX<plateau.getX() && y+deltaY>=0 && y+deltaY<plateau.getY())
			return plateau.getCases()[x+deltaX][y+deltaY];
		else
			return null;
	}
	
	public int getDistance(Case autreCase) {
		double dist=Math.sqrt(Math.pow((this.getX()-autreCase.getX()), 2) 
				+ Math.pow((this.getY()-autreCase.getY()), 2));
		return (int) Math.ceil(dist);
	}

	public void removePiece() {
		perso.getJoueur().getPerso().remove(perso);
		this.perso=null;
		plateau.notifier(this);
	}

	//
	// Other methods
	//

}
